<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
  <meta charset="utf-8" />
  <meta name="generator" content="pandoc" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
  <title>Release Notes for STM32L1xx HAL Drivers</title>
  <style>
    code{white-space: pre-wrap;}
    span.smallcaps{font-variant: small-caps;}
    span.underline{text-decoration: underline;}
    div.column{display: inline-block; vertical-align: top; width: 50%;}
    div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
    ul.task-list{list-style: none;}
    .display.math{display: block; text-align: center; margin: 0.5rem auto;}
  </style>
  <link rel="stylesheet" href="_htmresc/mini-st.css" />
  <!--[if lt IE 9]>
    <script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js"></script>
  <![endif]-->
</head>
<body>
<div class="row">
<div class="col-sm-12 col-lg-4">
<div class="card fluid">
<div class="sectione dark">
<center>
<h1 id="release-notes-for-stm32l1xx-hal-drivers"><small>Release Notes for</small> <mark>STM32L1xx HAL Drivers</mark></h1>
<p>Copyright © 2017 STMicroelectronics<br />
</p>
<a href="https://www.st.com" class="logo"><img src="_htmresc/st_logo.png" alt="ST logo" /></a>
</center>
</div>
</div>
<h1 id="license">License</h1>
<p>Licensed by ST under BSD 3-Clause license (the "License"). You may not use this package except in compliance with the License. You may obtain a copy of the License at:</p>
<p><a href="https://opensource.org/licenses/BSD-3-Clause">https://opensource.org/licenses/BSD-3-Clause</a></p>
<h1 id="purpose">Purpose</h1>
<p>The STM32Cube HAL and LL, an STM32 abstraction layer embedded software, ensure maximized portability across STM32 portfolio.</p>
<p>The portable APIs layer provides a generic, multi instanced and simple set of APIs to interact with the upper layer (application, libraries and stacks). It is composed of native and extended APIs set. It is directly built around a generic architecture and allows the build-upon layers, like the middleware layer, to implement its functions without knowing in-depth the used STM32 device. This improves the library code reusability and guarantees an easy portability on other devices and STM32 families.</p>
<p>The Low Layer (LL) drivers are part of the STM32Cube firmware HAL that provides a basic set of optimized and one shot services. The Low layer drivers, contrary to the HAL ones are not fully portable across the STM32 families; the availability of some functions depends on the physical availability of the relative features on the product. The Low Layer (LL) drivers are designed to offer the following features:</p>
<ul>
<li>New set of inline functions for direct and atomic register access</li>
<li>One-shot operations that can be used by the HAL drivers or from application level</li>
<li>Full independence from HAL and standalone usage (without HAL drivers)</li>
<li>Full features coverage of all the supported peripherals</li>
</ul>
</div>
<section id="update-history" class="col-sm-12 col-lg-8">
<h1>Update History</h1>
<div class="collapse">
<input type="checkbox" id="collapse-section15" checked aria-hidden="true"> <label for="collapse-section15" aria-hidden="true">V1.4.4 / 21-May-2021</label>
<div>
<h2 id="main-changes">Main Changes</h2>
<h3 id="maintenance-release">Maintenance release</h3>
<ul>
<li>Patch release to to fix known defects and enhancements implementation.</li>
</ul>
<h2 id="contents">Contents</h2>
<ul>
<li><strong>HAL Generic</strong> update
<ul>
<li>Update HAL TimeBase TIM template for more robustness
<ul>
<li>Update Hal_Init_Tick() API to propoerty store the priority when using the non-default time base.</li>
</ul></li>
</ul></li>
<li><strong>HAL/LL TIM</strong> update
<ul>
<li>Previous release note corrected by removing reference to ChannelNState.</li>
<li>Made TIM_DMADelayPulseCplt callback as a private function.</li>
<li>Update HAL_TIMEx_OnePulseN_Start and HAL_TIMEx_OnePulseN_Stop (pooling and IT mode) to take into consideration all OutputChannel parameters.</li>
<li>Update input capture measurement in DMA mode to avoid zero return values at high frequencies.</li>
<li>Update LL_TIM_GetCounterMode() API to return the correct counter mode.</li>
<li>Correct reversed description of TIM_LL_EC_ONEPULSEMODE One Pulse Mode.</li>
</ul></li>
<li><strong>HAL/LL SPI</strong> update
<ul>
<li>Update LL_SPI_TransmitData8() API to avoid casting the result to 8 bits.</li>
<li>Update to fix MISRA-C 2012 Rule-13.2.</li>
</ul></li>
<li><strong>HAL/LL USART</strong> update
<ul>
<li>Remove useless check on maximum BRR value by removing IS_LL_USART_BRR_MAX() macro.</li>
</ul></li>
<li><strong>HAL UART</strong> update
<ul>
<li>Correction on UART ReceptionType management in case of ReceptionToIdle API are called from RxEvent callback. Update UART polling and interruption processes to fix issues related to access out of user’s specified buffer. Fix wrong comment related to RX pin configuration within the description section. Enhance reception for idle services (ReceptionToIdle):
<ul>
<li>Add a new field (HAL_UART_RxTypeTypeDef) to the UART_HandleTypeDef structure to identify the type of ongoing reception.</li>
<li>Add UART Reception Event Callback registration.</li>
<li>Add reception specific APIs specific to reception for Idle transfer in different modes:</li>
<li>HAL_UARTEx_ReceiveToIdle(): Receive an amount of data in blocking mode until either the expected number of data is received or an IDLE event occurs.</li>
<li>HAL_UARTEx_ReceiveToIdle_IT(): Receive an amount of data in interrupt mode until either the expected number of data is received or an IDLE event occurs.</li>
<li>HAL_UARTEx_ReceiveToIdle_DMA(): Receive an amount of data in DMA mode until either the expected number of data is received or an IDLE event occurs.</li>
<li>Update HAL_UART_Receive(), HAL_UART_Receive_IT() and HAL_UART_Receive_DMA() APIs to support the new enhancement of ReceptionToIdle.</li>
</ul></li>
</ul></li>
<li><strong>HAL SMARTCARD</strong> update
<ul>
<li>Fix typos in the SMARTCARD State definition description.</li>
</ul></li>
<li><strong>HAL IRDA</strong> update
<ul>
<li>Fix typos in the IRDA State definition description.</li>
</ul></li>
<li><strong>HAL RTC</strong> update
<ul>
<li>New APIs to subtract or add one hour to the calendar in one single operation without going through the initialization procedure (Daylight Saving):
<ul>
<li>HAL_RTC_DST_Add1Hour()</li>
<li>HAL_RTC_DST_Sub1Hour()</li>
<li>HAL_RTC_DST_SetStoreOperation()</li>
<li>HAL_RTC_DST_ClearStoreOperation()</li>
<li>HAL_RTC_DST_ReadStoreOperation()</li>
<li>DayLightSaving and StoreOperation interfaces from RTC_TimeTypeDef type and HAL_RTC_DAYLIGHT_SAVING_TIME_ADD1H() and HAL_RTC_DAYLIGHT_SAVING_TIME_SUB1H() macros are now deprecated.</li>
</ul></li>
<li>Fix the wait for the RSF bit to be cleared in the LL_RTC_WaitForSynchro function.</li>
<li>Correct month management in IS_LL_RTC_MONTH() macro.</li>
<li>Update __HAL_RTC_…(__HANDLE__, …) macros to access registers through (__HANDLE__)-&gt;Instance pointer and avoid “unused variable” warnings.</li>
</ul></li>
<li><strong>LL FMC_LL</strong> update
<ul>
<li>Fix compilation warning with gcc -Wpedantic compiler option</li>
</ul></li>
<li><strong>HAL SDMMC</strong> update
<ul>
<li>Update the definition of SDMMC_DATATIMEOUT constant in order to allow the user to redefine it in his proper application.</li>
<li>SD_FindSCR() updated to resolve an issue with FIFO blocking when reading.</li>
<li>Update the definition of SDMMC_DATATIMEOUT constant in order to allow the user to redefine it in his proper application.</li>
<li>Add the block size settings in the initialization functions and remove it from read/write transactions to avoid repeated and inefficient reconfiguration.</li>
<li>Update read/write functions in DMA mode in order to force the DMA direction.</li>
<li>Deploy new functions MMC_ReadExtCSD() and SDMMC_CmdSendEXTCSD () that read and check the sectors number of the device in order to resolve the issue of wrongly reading big memory size.</li>
</ul></li>
<li><strong>HAL FLASH</strong> update
<ul>
<li>Update FLASH_SetErrorCode() to correctly handle the SIZERR flag.</li>
</ul></li>
<li><strong>HAL USB_FS</strong> update
<ul>
<li>HAL PCD: add fix transfer complete for IN Interrupt transaction in single buffer mode.</li>
</ul></li>
<li><strong>HAL OPAMP</strong> update
<ul>
<li>Fix CodeSonar error.</li>
<li>Update HAL_OPAMP_SelfCalibrate() API to avoid wrong configuration of trimming value “n” and “p”.</li>
</ul></li>
<li><strong>HAL I2C</strong> update
<ul>
<li>Update to avoid I2C interrupt in endless loop:
<ul>
<li>Update HAL_I2C_Master_Transmit_IT(), HAL_I2C_Master_Receive_IT(), HAL_I2C_Master_Transmit_DMA() and HAL_I2C_Master_Receive_DMA() APIs to unlock the I2C peripheral before generating the start.</li>
</ul></li>
<li>Update the management of (hi2c-&gt;hdmatx!=NULL) &amp; (hi2c-&gt;hdmarx!=NULL) check.</li>
<li>Update to prevent several calls of Start bit:
<ul>
<li>Update I2C_MemoryTransmit_TXE_BTF() API to increment EventCount.</li>
</ul></li>
<li>Update to use the right macro to clear I2C ADDR flag inside I2C_Slave_ADDR() API as it’s indicated in the reference manual.</li>
<li>Update HAL_I2C_EV_IRQHandler() and I2C_MasterTransmit_BTF() APIs to fix an issue where the transfer of the first few bytes to an I2C memory fails.</li>
</ul></li>
<li><strong>HAL/LL ADC</strong> update
<ul>
<li>Update HAL_ADC_Stop_DMA() API to check if DMA state is Busy before calling HAL_DMA_Abort() API to avoid DMA internal error.</li>
<li>Update timeout mechanism to avoid false timeout detection in case of preemption.</li>
<li>Update LL_ADC_REG_Init() API to avoid enabling continuous mode and discontinuous mode simultaneously.</li>
</ul></li>
<li><strong>HAL WWDG</strong> update
<ul>
<li>Update HAL driver description.</li>
</ul></li>
<li><strong>HAL IWDG</strong> update
<ul>
<li>Update HAL_IWDG_Init() API in order to fix HAL_GetTick() timeout vulnerability issue.</li>
<li>Add LSI startup time in default IWDG timeout calculation (HAL_IWDG_DEFAULT_TIMEOUT).</li>
</ul></li>
<li><strong>HAL EXTI</strong> update
<ul>
<li>Update macros using LINE as a macro parameter to use EXTI_LINE instead to resolve parameter conflicts with standard C usage.</li>
<li>Update HAL_EXTI_GetConfigLine() API to set default configuration value of Trigger and GPIOSel before checking each corresponding registers.</li>
</ul></li>
</ul>
</div>
</div>
<div class="collapse">
<input type="checkbox" id="collapse-section14" aria-hidden="true"> <label for="collapse-section14" aria-hidden="true">V1.4.3 / 22-October-2020</label>
<div>
<h2 id="main-changes-1">Main Changes</h2>
<h3 id="maintenance-release-1">Maintenance release</h3>
<ul>
<li>General updates to fix known defect.</li>
</ul>
<h2 id="contents-1">Contents</h2>
<ul>
<li><strong>HAL/LL I2C</strong> driver
<ul>
<li>Update to fix hardfault issue with HAL_I2C_Mem_Write_DMA() API:
<ul>
<li>Abort the right ongoing DMA transfer when memory write access request operation failed: fix typo “hdmarx” replaced by “hdmatx”</li>
</ul></li>
</ul></li>
</ul>
</div>
</div>
<div class="collapse">
<input type="checkbox" id="collapse-section13" aria-hidden="true"> <label for="collapse-section13" aria-hidden="true">V1.4.2 / 28-August-2020</label>
<div>
<h2 id="main-changes-2">Main Changes</h2>
<h3 id="maintenance-release-2">Maintenance release</h3>
<ul>
<li>Patch release to fix issue in I2C HAL driver</li>
</ul>
<h2 id="contents-2">Contents</h2>
<ul>
<li><strong>HAL I2C</strong> driver
<ul>
<li>Update I2C_MasterReceiveRXNE() static API to avoid set the STOP bit again after the bit clearing by Hardware during the masking operation.
<ul>
<li>Add new API I2C_WaitOnSTOPRequestThroughIT() to wait for stop bit.</li>
</ul></li>
</ul></li>
</ul>
</div>
</div>
<div class="collapse">
<input type="checkbox" id="collapse-section12" aria-hidden="true"> <label for="collapse-section12" aria-hidden="true">V1.4.1 / 24-June-2020</label>
<div>
<h2 id="main-changes-3">Main Changes</h2>
<h3 id="maintenance-release-3">Maintenance release</h3>
<ul>
<li>Add new HAL EXTI driver</li>
<li>General updates to fix known defects and enhancements implementation</li>
</ul>
<h2 id="contents-3">Contents</h2>
<ul>
<li><strong>HAL</strong> driver
<ul>
<li>Enhance HAL_SetTickFreq() API robustness
<ul>
<li>Restore previous tick frequency when a wrong tick initialization occurs.</li>
</ul></li>
</ul></li>
<li><strong>LL ADC</strong> driver
<ul>
<li>Fix ADC TEMPSENSOR/VREFINT calibration addresses</li>
</ul></li>
<li><strong>HAL/LL GPIO</strong> driver
<ul>
<li>Update HAL_GPIO_TogglePin() API to allow the toggling of many pins</li>
<li>Update GPIO initialization sequence to avoid unwanted pulse on GPIO Pin’s</li>
</ul></li>
<li><strong>HAL EXTI</strong> driver
<ul>
<li>Add new HAL_EXTI driver.</li>
</ul></li>
<li><strong>HAL FLASH</strong> driver
<ul>
<li>Fix assert compilation error with HAL_FLASHEx_DATAEEPROM_Erase() API.</li>
</ul></li>
<li><strong>HAL/LL I2C</strong> driver
<ul>
<li>Update HAL_I2C_ER_IRQHandler() API to fix acknowledge failure issue with I2C memory IT processes
<ul>
<li>Add stop condition generation when NACK occurs.</li>
</ul></li>
<li>Update I2C_DMAXferCplt(), I2C_DMAError() and I2C_DMAAbort() APIs to fix hardfault issue when hdmatx and hdmarx parameters in i2c handle aren’t initialized (NULL pointer).</li>
<li>Update HAL_I2C_Init() API to force software reset before setting new I2C configuration</li>
<li>Update HAL I2C processes to report ErrorCode when wrong I2C start condition occurs
<ul>
<li>Add new ErrorCode define: HAL_I2C_WRONG_START</li>
<li>Set ErrorCode parameter in I2C handle to HAL_I2C_WRONG_START</li>
</ul></li>
<li>Update sequential APIs to avoid requesting a START when a STOP condition is not fully treated
<ul>
<li>Wait the end of STOP treatment by polling (with a timeout) the STOP bit on Control register CR1</li>
</ul></li>
</ul></li>
<li><strong>HAL/LL I2S</strong> driver
<ul>
<li>Update HAL_I2S_DMAStop() API to be more safe
<ul>
<li>Add a check on BSY, TXE and RXNE flags before disabling the I2S</li>
</ul></li>
<li>Update HAL_I2S_DMAStop() API to fix multi-call transfer issue(to avoid re-initializing the I2S for the next transfer).
<ul>
<li>Add __HAL_I2SEXT_FLUSH_RX_DR() and __HAL_I2S_FLUSH_RX_DR() macros to flush the remaining data inside DR registers.</li>
<li>Add new ErrorCode define: HAL_I2S_ERROR_BUSY_LINE_RX</li>
</ul></li>
</ul></li>
<li><strong>HAL IRDA</strong> driver
<ul>
<li>Update IRDA interruption handler to manage correctly the overrun interrupt
<ul>
<li>Add in the HAL_IRDA_IRQHandler() API a check on USART_CR1_RXNEIE bit when an overrun interrupt occurs.</li>
</ul></li>
</ul></li>
<li><strong>HAL SMARTCARD</strong> driver
<ul>
<li>Update SMARTCARD interruption handler to manage correctly the overrun interrupt
<ul>
<li>Add in the HAL_SMARTCARD_IRQHandler() API a check on USART_CR1_RXNEIE bit when an overrun interrupt occurs.</li>
</ul></li>
<li>Update SMARTCARD transmission and reception API to handle memory corruption
<ul>
<li>HAL_SMARTCARD_Transmit(), HAL_SMARTCARD_Receive()</li>
<li>SMARTCARD_Transmit_IT(), SMARTCARD_Receive_IT()</li>
</ul></li>
</ul></li>
<li><strong>HAL/LL SPI</strong> driver
<ul>
<li>Update to implement Erratasheet: BSY bit may stay high at the end of a data transfer in Slave mode.</li>
<li>Update SPI_DMAReceiveCplt() API to handle efficiently the repeated transfers.
<ul>
<li>To avoid setting the BaudRatePrescaler in case of Slave Motorola Mode</li>
<li>Use the bit-mask for SPI configuration</li>
</ul></li>
<li>Update Transmit/Receive processes in half-duplex mode
<ul>
<li>Disable the SPI instance before setting BDIOE bit</li>
</ul></li>
<li>Fix wrong timeout management
<ul>
<li>Calculate Timeout based on a software loop to avoid blocking issue if Systick is disabled</li>
</ul></li>
</ul></li>
<li><strong>HAL/LL TIM</strong> driver
<ul>
<li>Align HAL/LL TIM driver with latest updates and enhancements</li>
<li>Add new macros to enable and disable the fast mode when using the one pulse mode to output a waveform with a minimum delay
<ul>
<li>__HAL_TIM_ENABLE_OCxFAST() and __HAL_TIM_DISABLE_OCxFAST().</li>
</ul></li>
<li>Update Encoder interface mode to keep TIM_CCER_CCxNP bits low
<ul>
<li>Add TIM_ENCODERINPUTPOLARITY_RISING and TIM_ENCODERINPUTPOLARITY_FALLING definitions to determine encoder input polarity.</li>
<li>Add IS_TIM_ENCODERINPUT_POLARITY() macro to check the encoder input polarity.</li>
<li>Update HAL_TIM_Encoder_Init() API</li>
<li>Replace IS_TIM_IC_POLARITY() macro by IS_TIM_ENCODERINPUT_POLARITY() macro.</li>
</ul></li>
<li>Fix bug when using multiple DMA request to different channels of same timer
<ul>
<li>Introduce DMA burst state management mechanism
<ul>
<li>Add a new structure for DMA Burst States definition : HAL_TIM_DMABurstStateTypeDef</li>
<li>Update __HAL_TIM_RESET_HANDLE_STATE to support DMABurstState</li>
<li>Add a new API HAL_TIM_DMABurstState() to get the actual state of a DMA burst operation</li>
<li>Add DMABurstState, the DMA burst operation state, in the TIM_HandleTypeDef structure</li>
<li>Add new API TIM_DMAErrorCCxN() for TIM DMA error callback (complementary channel)</li>
<li>Add new API TIM_DMADelayPulseNCplt() for TIM DMA Delay Pulse complete callback (complementary channel)</li>
</ul></li>
</ul></li>
<li>Implement TIM channel state management mechanism
<ul>
<li>Add new macro
<ul>
<li>TIM_CHANNEL_STATE_SET_ALL</li>
<li>TIM_CHANNEL_STATE_SET</li>
<li>TIM_CHANNEL_STATE_GET</li>
</ul></li>
<li>Add new API HAL_TIM_GetActiveChannel()</li>
<li>Add new API HAL_TIM_GetChannelState() to get actual state of the TIM channel</li>
<li>Add a new structure for TIM channel States definition : HAL_TIM_ChannelStateTypeDef</li>
<li>Update __HAL_TIM_RESET_HANDLE_STATE to support ChannelState</li>
<li>Add a new element in the TIM_HandleTypeDef structure : ChannelState to manage TIM channel operation state</li>
</ul></li>
<li>Update HAL_TIMEx_MasterConfigSynchronization() API to avoid functional errors and assert fails when using some TIM instances as input trigger.
<ul>
<li>Replace IS_TIM_SYNCHRO_INSTANCE() macro by IS_TIM_MASTER_INSTANCE() macro.</li>
<li>Add IS_TIM_SLAVE_INSTANCE() macro to check on TIM_SMCR_MSM bit.</li>
</ul></li>
<li>Remove ‘register’ storage class specifier from LL TIM driver.</li>
<li>Add new API HAL_TIM_DMABurst_MultiWriteStart() allowing to configure the DMA Burst to transfer multiple Data from the memory to the TIM peripheral</li>
<li>Add new API HAL_TIM_DMABurst_MultiReadStart() allowing to configure the DMA Burst to transfer Data from the TIM peripheral to the memory</li>
</ul></li>
<li><strong>HAL RCC</strong> driver
<ul>
<li>Fix extra parentheses compilation warnings with clang compiler</li>
<li>Update HAL_RCC_GetSysClockFreq() API to avoid the risk of rounding overflow.</li>
</ul></li>
<li><strong>HAL/LL UART</strong> driver
<ul>
<li>Update UART polling processes to handle efficiently the Lock mechanism
<ul>
<li>Move the process unlock at the top of the HAL_UART_Receive() and HAL_UART_Transmit() API.</li>
</ul></li>
<li>Update UART interruption handler to manage correctly the overrun interrupt
<ul>
<li>Add in the HAL_UART_IRQHandler() API a check on USART_CR1_RXNEIE bit when an overrun interrupt occurs.</li>
</ul></li>
<li>Update UART BRR calculation for ROM size gain</li>
</ul></li>
<li><strong>HAL/LL USART</strong> driver
<ul>
<li>Update some API description
<ul>
<li>HAL_USART_Transmit() / HAL_USART_Transmit_IT()
<ul>
<li>HAL_USART_Receive() / HAL_USART_Receive_IT()</li>
<li>HAL_USART_TransmitReceive() / HAL_USART_TransmitReceive_IT()</li>
<li>HAL_USART_Transmit_DMA() / HAL_USART_Receive_DMA() / HAL_USART_TransmitReceive_DMA()</li>
</ul></li>
</ul></li>
<li>Update USART interruption handler to manage correctly the overrun interrupt
<ul>
<li>Add in the HAL_USART_IRQHandler() API a check on USART_CR1_RXNEIE bit when an overrun interrupt occurs.</li>
</ul></li>
</ul></li>
<li><strong>HAL/LL USB</strong> driver
<ul>
<li>Bug fix: USB_ReadPMA() and USB_WritePMA() by ensuring 16-bits access to USB PMA memory</li>
<li>Bug fix: correct USB RX count calculation</li>
<li>Fix USB Bulk transfer double buffer mode</li>
<li>Remove register keyword from USB defined macros as no more supported by C++ compiler</li>
<li>Minor rework on USBD_Start() and USBD_Stop() APIs: stopping device will be handled by HAL_PCD_DeInit() API.</li>
</ul></li>
<li><strong>LL UTILS</strong> driver
<ul>
<li>Add new LL API LL_SetFlashLatency() to set Flash latency.</li>
</ul></li>
</ul>
</div>
</div>
<div class="collapse">
<input type="checkbox" id="collapse-section11" aria-hidden="true"> <label for="collapse-section11" aria-hidden="true">V1.4.0 / 05-April-2019</label>
<div>
<h2 id="main-changes-4">Main Changes</h2>
<h3 id="maintenance-release-4">Maintenance release</h3>
<ul>
<li>Add support of <strong>HAL callback registration</strong> feature</li>
<li>Add several enhancements implementation</li>
<li>Fix known defects to be aligned with others STM32 series</li>
</ul>
<h2 id="contents-4">Contents</h2>
<ul>
<li><strong>HAL/LL</strong> generic
<ul>
<li><p>Add support of <strong>HAL callback registration</strong> feature</p></li>
<li><p>The feature <strong>disabled by default</strong> is available for the following HAL drivers:</p>
<ul>
<li><strong>ADC, COMP, DAC, I2C, I2S, IRDA, LPTIM, PCD, RNG, RTC, SMARTCARD, SMBUS, SPI, TIM, TSC, UART, USART</strong> and <strong>WWDG</strong></li>
</ul></li>
<li><p>The feature may be enabled individually per HAL PPP driver by setting the corresponding definition USE_HAL_PPP_REGISTER_CALLBACKS to 1U in stm32l1xx_hal_conf.h project configuration file (template file stm32l1xx_hal_conf_template.h available from Drivers/STM32L1xx_HAL_Driver/Inc)</p></li>
<li><p>Once enabled, the user application may resort to HAL_PPP_RegisterCallback() to register specific callback function(s) and unregister it(them) with HAL_PPP_UnRegisterCallback().</p></li>
<li><p>Update HAL/LL Driver compliancy with MISRA C 2012 rules</p></li>
<li><p>stm32l1xx_hal_def.h</p>
<ul>
<li>Update file to avoid compiler warnings from __packed definitions</li>
<li>Update UNUSED() macro to fix compilation warning with g++ compiler</li>
<li>Replace include stdio.h by stddef.h</li>
<li>Update __RAM_FUNC define to not impose function type</li>
</ul></li>
</ul></li>
<li><strong>HAL</strong> driver
<ul>
<li>Add HAL_GetUIDw0(), HAL_GetUIDw1() and HAL_GetUIDw2() for 96-bit UID</li>
<li>Modify default HAL_Delay implementation to guarantee minimum delay</li>
<li>Update Doxygen tags in macros description to have generate correct CHM format</li>
<li>Update implementation of HAL_SetTickFreq() function</li>
</ul></li>
<li><strong>HAL ADC</strong> driver
<ul>
<li>Add callback registration feature
<ul>
<li>Add HAL_ADC_RegisterCallback() and HAL_ADC_UnRegisterCallback() APIs</li>
<li>Add callback identifiers in HAL_ADC_CallbackIDTypeDef enumerated typedef</li>
</ul></li>
<li>Remove unused code in HAL_ADC_Stop_DMA() function.</li>
</ul></li>
<li><strong>HAL/LL COMP</strong> driver
<ul>
<li>Add callback registration feature
<ul>
<li>Add HAL_COMP_RegisterCallback() and HAL_COMP_UnRegisterCallback() APIs</li>
<li>Add callback identifiers in HAL_COMP_CallbackIDTypeDef enumerated typedef</li>
</ul></li>
<li>Update define for COMP_NONINVERTINGINPUT_PA6</li>
<li>Update define for LL_COMP_INPUT_PLUS_IO11</li>
<li>Correct issue with input plus COMP1 in windowmode</li>
<li>Add missing LL function for COMP_CSR-&gt;VREFOUTEN bit</li>
</ul></li>
<li><strong>HAL CRC</strong> driver
<ul>
<li>Align HAL/LL CRC driver with latest updates and enhancements</li>
<li>Update CRC driver to remove not applicable InputDataFormat</li>
</ul></li>
<li><strong>HAL DAC</strong> driver
<ul>
<li>Align HAL/LL DAC driver with latest updates and enhancements</li>
<li>Add callback registration feature
<ul>
<li>Add HAL_DAC_RegisterCallback() and HAL_DAC_UnRegisterCallback() APIs</li>
<li>Add callback identifiers in HAL_DAC_CallbackIDTypeDef enumerated typedef</li>
</ul></li>
</ul></li>
<li><strong>HAL/LL DMA</strong> driver
<ul>
<li>Align HAL/LL DMA drivers with latest updates and enhancements</li>
<li>Add missing APIs to register/unregister DMA callbacks</li>
</ul></li>
<li><strong>HAL FLASH</strong> driver
<ul>
<li>Update HAL_FLASH_Unlock() and HAL_FLASH_OB_Unlock() in order the functions do not return an error when already unlocked</li>
<li>Update HAL_FLASHEx_ProgramParallelHalfPage(), HAL_FLASHEx_HalfPageProgram(), HAL_FLASHEx_DATAEEPROM_EraseDoubleWord(), HAL_FLASHEx_DATAEEPROM_ProgramDoubleWord() so that the functions should not be restricted to privilege mode</li>
<li>Update FLASH_OB_GetRDP() function to return the correct RDP level</li>
<li>Update FLASH_OB_GetUser() and FLASH_OB_UserConfig() to use the combination of specific masks FLASH_OBR_IWDG_SW, FLASH_OBR_nRST_STOP and FLASH_OBR_nRST_STDBY</li>
</ul></li>
<li><strong>HAL GPIO</strong> driver
<ul>
<li>Update HAL_GPIO_DeInit() function to perform EXTI configuration reset before GPIO configuration</li>
<li>Improve robustness of HAL_GPIO_TogglePin() function</li>
<li>Update definition of IS_GPIO_PIN to remove compilation warning with IAR tool chain</li>
<li>Update usage description for HAL_GPIO_LockPin() to justify an unused read of a register</li>
</ul></li>
<li><strong>HAL/LL I2C</strong> driver
<ul>
<li>Align HAL/LL I2C driver with latest updates and enhancements</li>
<li>Add callback registration feature
<ul>
<li>Add HAL_I2C_RegisterCallback(), HAL_I2C_UnRegisterCallback(), HAL_I2C_RegisterAddrCallback() and HAL_I2C_UnRegisterAddrCallback() APIs</li>
<li>Add callback identifiers in HAL_I2C_CallbackIDTypeDef enumerated typedef</li>
</ul></li>
<li>Add I2C_FIRST_AND_NEXT_FRAME for I2C Sequential transfer options: allow to manage a sequence with start condition, address and data to transfer without a final stop condition, an then permit a call to the same master sequential interface several times.</li>
<li>Add reset on slave LISTEN_TX state in case of direction change</li>
<li>Remove unused variable in HAL_I2C_Slave_Transmit_IT/DMA() and HAL_I2C_Slave_Receive_IT/DMA() functions to avoid warning compilation with linux tool chain</li>
<li>Add I2C slave enhancement with the functions: HAL_I2C_Master_Sequential_Transmit_DMA(), HAL_I2C_Master_Sequential_Receive_DMA(), HAL_I2C_Slave_Sequential_Transmit_DMA(), HAL_I2C_Slave_Sequential_Receive_DMA() functions</li>
<li>Update HAL_I2C_Master_Seq_Transmit_IT(DMA), HAL_I2C_Master_Seq_Receive_IT(DMA) functions.
<ul>
<li>Update comments about Device Address parameter (DevAddress) description in I2C functions header</li>
<li>Add restart condition for each call of HAL_I2C_Master_Seq_xxxx_IT</li>
<li>Fix MISRAC2012 issue
<ul>
<li>Renamed HAL_I2C_Master_Sequential_Transmit_IT(DMA) to HAL_I2C_Master_Seq_Transmit_IT(DMA)</li>
<li>Renamed HAL_I2C_Master_Sequential_Receive_IT(DMA) to HAL_I2C_Master_Seq_Receive_IT(DMA)</li>
<li>Renamed HAL_I2C_Slave_Sequential_Transmit_IT(DMA) to HAL_I2C_Slave_Seq_Transmit_IT(DMA)</li>
<li>Renamed HAL_I2C_Slave_Sequential_Receive_IT(DMA) to HAL_I2C_Slave_Seq_Receive_IT(DMA)</li>
</ul></li>
</ul></li>
<li>Update ErrorCode to correct wrong returned value after waiting until BUSY flag is reset</li>
</ul></li>
<li><strong>HAL I2S</strong> driver
<ul>
<li>Align HAL I2S driver with latest updates and enhancements</li>
<li>Add callback registration feature
<ul>
<li>Add HAL_I2S_RegisterCallback() and HAL_I2S_UnRegisterCallback() APIs</li>
<li>Add callback identifiers in HAL_I2S_CallbackIDTypeDef enumerated typedef</li>
</ul></li>
</ul></li>
<li><strong>HAL IRDA</strong> driver
<ul>
<li>Align HAL IRDA driver with latest updates and enhancements</li>
<li>Add callback registration feature
<ul>
<li>Add HAL_IRDA_RegisterCallback() and HAL_IRDA_UnRegisterCallback() APIs</li>
<li>Add callback identifiers in HAL_IRDA_CallbackIDTypeDef enumerated typedef</li>
</ul></li>
<li>Review IRDA state machine to avoid cases where IRDA state is overwritten by IRDA IRQ</li>
<li>Implement new APIs for HAL IRDA Abort management:
<ul>
<li>HAL_IRDA_Abort(), HAL_IRDA_AbortTransmit(), HAL_IRDA_AbortReceive(), HAL_IRDA_Abort_IT(), HAL_IRDA_AbortTransmit_IT(), HAL_IRDA_AbortReceive_IT()</li>
</ul></li>
<li>Optimize WaitOnFlag management in IRDA_Transmit() function</li>
<li>Optimize all HAL IRQ Handler routines</li>
<li>Optimize HAL IRDA to avoid using macros as argument of function calls</li>
</ul></li>
<li><strong>HAL OPAMP</strong> driver
<ul>
<li>Align HAL OPAMP driver with latest updates and enhancements</li>
<li>Add callback registration feature
<ul>
<li>Add HAL_OPAMP_RegisterCallback() and HAL_OPAMP_UnRegisterCallback() APIs</li>
<li>Add callback identifiers in HAL_OPAMP_CallbackIDTypeDef enumerated typedef</li>
</ul></li>
</ul></li>
<li><strong>HAL/LL RCC</strong> driver
<ul>
<li>Replace __HAL_RCC_CRYP_CLK_ENABLE by __HAL_RCC_AES_CLK_ENABLE</li>
<li>Change HAL_RCC_DeInit() to HAL_StatusTypeDef</li>
<li>Update HAL_RCC_DeInit() and LL_RCC_DeInit() to also clear interrupts and reset flags</li>
<li>Update HAL_RCC_DeInit() and LL_RCC_DeInit() to add check on PLLRDY before clearing PLLCFGR register</li>
<li>Update HAL_RCC_DeInit() to insure that default MSI range is set prior to enable MSI and use it as SYSCLK source</li>
<li>Update LL_RCC_DeInit() to add the key word volatile and avoid compilation issue with gcc -O3</li>
<li>Remove LSI_VALUE definition from stm32l1xx_hal_rcc_ex.h to have it declared in HAL Generic stm32l1xx_hal_conf_template.h/stm32l1xx_hal_conf.h as other families STM32 HAL drivers</li>
<li>Correct LSI_VALUE LL definition in stm32l1xx_ll_rcc.h</li>
<li>Update HAL_RCC_OscConfig() to avoid MCU hangs after some stop/wakeup cycles</li>
<li>Replace all calls to HAL_InitTick(TICK_INT_PRIORITY) with HAL_InitTick(uwTickPrio) to avoid Tick priority overwrite</li>
<li>Add new LL_RCC_PLL_SetMainSource macro to set the PLL source without enabling any PLL</li>
</ul></li>
<li><strong>HAL/LL RTC</strong> driver
<ul>
<li>Align HAL/LL RTC driver with latest updates and enhancements</li>
<li>Remove unused value in HAL_RTC_SetTime() function</li>
<li>Update implementation of LL_RTC_DATE_Get() function</li>
<li>Correct issue in the argument of LL_RTC_ALMB_SetDay() function</li>
<li>Add callback registration feature
<ul>
<li>Add HAL_RTC_RegisterCallback() and HAL_RTC_UnRegisterCallback() APIs</li>
<li>Add callback identifiers in HAL_RTC_CallbackIDTypeDef enumerated typedef</li>
</ul></li>
</ul></li>
<li><strong>HAL SDMMC</strong> driver
<ul>
<li>Align HAL SDMMC driver with latest updates and enhancements</li>
<li><strong>Due to limitation <em>SDIO hardware flow control</em> indicated in Errata Sheet</strong> :
<ul>
<li>In 4-bits bus wide mode, do not use the HAL_SD_WriteBlocks_IT() or HAL_SD_WriteBlocks() APIs otherwise underrun will occur and there is not possibility to activate the flow control</li>
<li>Use DMA mode when using 4-bits bus wide mode or decrease the frequency</li>
</ul></li>
<li>Add callback registration feature
<ul>
<li>Add HAL_SD_RegisterCallback(),HAL_SD_UnRegisterCallback(), HAL_SD_RegisterTransceiverCallback() and HAL_SD_UnRegisterTransceiverCallback APIs</li>
<li>Add callback identifiers in HAL_SD_CallbackIDTypeDef enumerated typedef</li>
</ul></li>
</ul></li>
<li><strong>HAL SMARTCARD</strong> driver
<ul>
<li>Align HAL SMARTCARD driver with latest updates and enhancements</li>
<li>Add callback registration feature
<ul>
<li>Add HAL_SMARTCARD_RegisterCallback() and HAL_SMARTCARD_UnRegisterCallback() APIs</li>
<li>Add callback identifiers in HAL_SMARTCARD_CallbackIDTypeDef enumerated typedef</li>
</ul></li>
<li>Review SMARTCARD state machine to avoid cases where SMARTCARD state is overwritten by SMARTCARD IRQ</li>
<li>Implement new APIs for HAL SMARTCARD Abort management:
<ul>
<li>HAL_SMARTCARD_Abort(), HAL_SMARTCARD_AbortTransmit(), HAL_SMARTCARD_AbortReceive(), HAL_SMARTCARD_Abort_IT(), HAL_SMARTCARD_AbortTransmit_IT(), HAL_SMARTCARD_AbortReceive_IT()</li>
</ul></li>
<li>Optimize WaitOnFlag management in SMARTCARD_Transmit() function</li>
<li>Optimize all HAL IRQ Handler routines</li>
<li>Optimize HAL SMARTCARD to avoid using macros as argument of function calls</li>
</ul></li>
<li><strong>HAL/LL SPI</strong> driver
<ul>
<li>Align HAL/LL SPI driver with latest updates and enhancements</li>
<li><strong>Backward compatibility</strong>:
<ul>
<li>Remove <strong>stm32l1xx_hal_spi_ex.c/.h</strong> files and move the functions/definitions to stm32l1xx_hal_spi.c/.h</li>
<li>The user projects must be updated to remove <strong>stm32l1xx_hal_spi_ex.c/.h</strong> from files list</li>
</ul></li>
<li>Fix issue in HAL_SPI_Transmit() and HAL_SPI_TransmitReceive() functions</li>
<li>Update HAL/LL SPI driver to manage TI mode not supported by all STM32L1xx devices</li>
<li>Add callback registration feature
<ul>
<li>Add HAL_SPI_RegisterCallback() and HAL_SPI_UnRegisterCallback() APIs</li>
<li>Add callback identifiers in HAL_SPI_CallbackIDTypeDef enumerated typedef</li>
</ul></li>
</ul></li>
<li><strong>HAL/LL TIM</strong> driver
<ul>
<li>Align HAL/LL TIM driver with latest updates and enhancements</li>
<li>Add support of preload control in HAL TIM API</li>
<li>Remove TIM_CHANNEL_4 argument from description of HAL_TIMEx_OCN_xxx() and HAL_TIMEx_PWMN_xxxx() functions</li>
<li>Update comments in HAL/LL functions to describe how to switch from Center Aligned counter mode to Edge Aligned Down mode</li>
<li>Remove OCIdleState from TIM_OC_InitTypeDef and TIM_OnePulse_InitTypeDef</li>
<li>Update behavior of LL_TIM_EnableUpdateEvent() and LL_TIM_DisableUpdateEvent() functions</li>
<li>Add callback registration feature + Add HAL_TIM_RegisterCallback() and HAL_TIM_UnRegisterCallback() APIs + Add callback identifiers in HAL_TIM_CallbackIDTypeDef enumerated typedef</li>
</ul></li>
<li><strong>HAL UART/USART</strong> driver
<ul>
<li>Align HAL UART/USART driver with latest updates and enhancements</li>
<li>Add callback registration feature
<ul>
<li>Add HAL_UART/USART_RegisterCallback() and HAL_UART/USART_UnRegisterCallback() APIs</li>
<li>Add callback identifiers in HAL_UART/USART_CallbackIDTypeDef enumerated typedef</li>
</ul></li>
<li>Add missing __IO in UART/USART_HandleTypeDef definition (for TxXferCount and RxXferCount)</li>
<li>Review UART/USART state machine to avoid cases where UART/USART state is overwritten by UART/USART IRQ</li>
<li>Implement new APIs for HAL UART/USART Abort management:
<ul>
<li>HAL_UART/USART_Abort(), HAL_UART/USART_AbortTransmit(), HAL_UART/USART_AbortReceive(), HAL_UART/USART_Abort_IT(), HAL_UART/USART_AbortTransmit_IT(), HAL_UART/USART_AbortReceive_IT()</li>
</ul></li>
<li>Optimize WaitOnFlag management in UART/USART_Transmit() function</li>
<li>Optimize all HAL IRQ Handler routines</li>
<li>Align __HAL_UART_GET_IT and __HAL_UART_GET_IT_SOURCE with other series</li>
<li>Optimize HAL UART/USART to avoid using macros as argument of function calls</li>
<li>Update USART BRR calculation</li>
</ul></li>
<li><strong>HAL USB</strong> driver
<ul>
<li>Align HAL USB driver with latest updates and enhancements</li>
<li>Upgrade to USB Device Library v2.5.2</li>
<li>Fix issue with Buffer Overflow in PCD_ReadPMA() function</li>
<li>Add callback registration feature
<ul>
<li>Add HAL_PCD_RegisterCallback(),HAL_PCD_UnRegisterCallback(), HAL_PCD_RegisterDataOutStageCallback(), HAL_PCD_UnRegisterDataOutStageCallback(), HAL_PCD_RegisterDataInStageCallback(), HAL_PCD_UnRegisterDataInStageCallback(), HAL_PCD_RegisterIsoOutIncpltCallback(), HAL_PCD_UnRegisterIsoOutIncpltCallback(), HAL_PCD_RegisterIsoInIncpltCallback(), HAL_PCD_UnRegisterIsoInIncpltCallback(), HAL_PCD_RegisterBcdCallback(), HAL_PCD_UnRegisterBcdCallback(), HAL_PCD_RegisterLpmCallback() and HAL_PCD_UnRegisterLpmCallback() APIs</li>
<li>Add callback identifiers in HAL_PCD_CallbackIDTypeDef enumerated typedef</li>
</ul></li>
</ul></li>
<li><strong>LL UTILS</strong> driver
<ul>
<li>Correct LL_GetUID_Word2 function to fix error in UID flash location</li>
<li>Fix mismatch return type in LL_GetPackageType(void)</li>
</ul></li>
<li><strong>HAL WWDG</strong> driver
<ul>
<li>Align HAL WWDG driver with latest updates and enhancements</li>
<li>Add callback registration feature
<ul>
<li>Add HAL_WWDG_RegisterCallback() and HAL_WWDG_UnRegisterCallback() APIs</li>
<li>Add callback identifiers in HAL_WWDG_CallbackIDTypeDef enumerated typedef</li>
</ul></li>
</ul></li>
</ul>
</div>
</div>
<div class="collapse">
<input type="checkbox" id="collapse-section9" aria-hidden="true"> <label for="collapse-section9" aria-hidden="true">V1.3.1 / 25-August-2017</label>
<div>
<h2 id="main-changes-5">Main Changes</h2>
<h3 id="patch-release">Patch release</h3>
<h2 id="contents-5">Contents</h2>
<ul>
<li><strong>HAL/LL</strong> generic
<ul>
<li>Remove DATE and VERSION fields from header files</li>
<li>Update CHM User Manual for Drivers/STM32L1xx_HAL_Driver</li>
</ul></li>
</ul>
</div>
</div>
<div class="collapse">
<input type="checkbox" id="collapse-section8" aria-hidden="true"> <label for="collapse-section8" aria-hidden="true">V1.3.0 / 21-April-2017</label>
<div>
<h2 id="main-changes-6">Main Changes</h2>
<h3 id="maintenance-release-5">Maintenance release</h3>
<h2 id="contents-6">Contents</h2>
<ul>
<li><strong>HAL/LL</strong> generic
<ul>
<li>Enhanced HAL delay and time base implementation:
<ul>
<li>Added new templates stm32l1xx_hal_timebase_tim_template.c which can be used to override the native HAL time base functions (defined as weak) and to use Timer as time base tick source.</li>
<li>For more details about the usage of these drivers, please refer to HAL_TimeBase_TIM examples and FreeRTOS-based applications.</li>
</ul></li>
<li>Updated HAL Driver compliancy with MISRA C 2004 rules:
<ul>
<li>MISRA C 2004 rule 10.3 (illegal explicit conversion from type “unsigned int” to "uint16_t *)</li>
<li>MISRA C 2004 rule 10.5 (if the bitwise operators ~ and &lt;&lt; are applied to an operand of underlying type ‘unsigned char’ or ‘unsigned short’, the result shall be immediately cast to the underlying type of the operand)</li>
<li>MISRA C 2004 rule 11.4 (cast should not be performed between a pointer to object type and a different pointer to object type)</li>
<li>MISRA C 2004 rule 12.6 (logical operators should not be confused with bitwise operators)</li>
<li>MISRA C 2004 rule 12.7 (bitwise operations not performed on signed integer types)</li>
<li>MISRA C 2004 rule 14.3 (a null statement shall only occur on a line by itself)</li>
</ul></li>
<li>Removed (uint32_t) cast when “U” is used in order to avoid double definitions.</li>
<li>Replaced hard coded POSITION definition in HAL/LL drivers by the associated PPP_xxx_pos CMSIS define.</li>
</ul></li>
<li><strong>HAL CORTEX</strong>
<ul>
<li>Updated HAL_MPU_Disable function to clear whole CR register.</li>
</ul></li>
<li><strong>LL DMA</strong>
<ul>
<li>Improved CPAR and CMAR registers access in LL_DMA_ConfigAddresses function.</li>
</ul></li>
<li><strong>HAL FLASH</strong>
<ul>
<li>Updated HAL_FLASHEx_Erase_IT() function to check the FLASH is ready before starting Erase by IT.</li>
</ul></li>
<li><strong>HAL/LL GPIO</strong>
<ul>
<li>Renamed GPIO_AFRL_AFRLx and GPIO_AFRL_AFRHx bit to GPIO_AFRL_AFSELx.</li>
</ul></li>
<li><strong>HAL/LL I2C</strong>
<ul>
<li>Added LL_I2C_DisableReset() function to allow the disable of SWRST.</li>
</ul></li>
<li><strong>HAL PCD</strong>
<ul>
<li>Corrected double buffer implementation in PCD_SET_EP_DBUF1_CNT() macro.</li>
<li>Added missing USB_CNTR_SOFM in the setting of wInterrupt_Mask global variable used in HAL_PCD_Init.</li>
<li>Removed lock/unlock from receive and transmit endpoints.</li>
</ul></li>
<li><strong>HAL/LL PWR</strong>
<ul>
<li>Replaced HAL_PWREx_GetVoltageRange() function by direct register access to remove dependency with HAL PWR.</li>
<li>Renamed the LL_PWR_IsActiveFlag_VOSF() API to LL_PWR_IsActiveFlag_VOS() in order to remove reference to PWR flag name and to refer to the Power feature.</li>
</ul></li>
<li><strong>HAL/LL RTC</strong>
<ul>
<li>Renamed RTC_CR_BCK bits in RTC_CR register to RTC_CR_BKP, to be aligned with others series.</li>
</ul></li>
<li><strong>HAL/LL SPI</strong>
<ul>
<li>Removed LL_SPI_SR_UDR define which is available only for I2S feature.</li>
<li>Updated LL_SPI_TransmitData16() et LL_SPI_TransmitData8 functions.</li>
</ul></li>
<li><strong>HAL/LL TIM</strong>
<ul>
<li>Corrected error in LL_TIM_EnableUpdateEvent() and LL_TIM_DisableUpdateEvent() functions.</li>
</ul></li>
</ul>
</div>
</div>
<div class="collapse">
<input type="checkbox" id="collapse-section7" aria-hidden="true"> <label for="collapse-section7" aria-hidden="true">V1.2.0 / 01-July-2016</label>
<div>
<h2 id="main-changes-7">Main Changes</h2>
<h3 id="maintenance-release-6">Maintenance release</h3>
<ul>
<li>First official release supporting the <strong>Low Level</strong> drivers for the <strong>STM32L1xx</strong> family:
<ul>
<li>Low Layer drivers APIs provide register level programming: they require deep knowledge of peripherals described in STM32L1xx Reference Manual.</li>
<li>Low Layer drivers are available for: ADC, COMP, CORTEX, CRC, DAC, DMA, EXTI, GPIO, I2C, IWDG, OPAMP, PWR, RCC, RTC, SPI, TIM, USART, WWDG peripherals and additional Low Level Bus, System and Utilities APIs.</li>
<li>Low Layer drivers APIs are implemented as static inline function in new Inc/stm32l1xx_ll_ppp.h files for PPP peripherals, there is no configuration file and each stm32l1xx_ll_ppp.h file must be included in user code.</li>
</ul></li>
</ul>
<h2 id="contents-7">Contents</h2>
<ul>
<li><strong>Generic updates</strong>
<ul>
<li>Update HAL drivers to apply MISRA C 2004 rule 10.6.</li>
<li>uwTick must be global and not static to allow overwrite of HAL_IncTick()</li>
</ul></li>
<li><strong>ADC</strong>
<ul>
<li>Clear the bit OVR (overrun) in addition to EOC (end of conversion) inside HAL_ADC_Start, HAL_ADC_Start_IT and HAL_ADC_Start_DMA.</li>
</ul></li>
<li><strong>CRC</strong>
<ul>
<li>HAL_CRC_DeInit() resets CRC_IDR register to reset value.</li>
</ul></li>
<li><strong>DMA</strong>
<ul>
<li>Add function HAL_StatusTypeDef HAL_DMA_Abort_IT(DMA_HandleTypeDef *hdma).</li>
<li>This function aborts the DMA Transfer in Interrupt mode.</li>
<li>Add macro __HAL_DMA_GET_COUNTER</li>
<li>This macro permits to get the number of remaining data units in the current DMAy Channelx transfer.</li>
<li>Global driver code optimization to reduce memory footprint</li>
</ul></li>
<li><strong>FLASH</strong>
<ul>
<li>Correct MISRA 10.3 Error[Pm069]: if identifiers are given for any of the parameters, then the identifiers used in the declaration and definition shall be identical (MISRA C 2004 rule 16.4).</li>
</ul></li>
<li><strong>GPIO</strong>
<ul>
<li>IS_GPIO_PIN is more robust.</li>
</ul></li>
<li><strong>I2C</strong>
<ul>
<li>WaitOnFlag is optimized to effectively last until the expected timeout of a transfer.</li>
<li>Optimisation of the IRQHandler.</li>
<li>Rework DMA end process and I2C error management during DMA transfer.</li>
<li>HAL_I2C_Master_Transmit_DMA now returns an error in case of communication error.</li>
<li>Add support for repeated start feature.</li>
</ul></li>
<li><strong>IWDG</strong>
<ul>
<li>New simplified HAL IWDG driver: remove HAL_IWDG_Start(), HAL_IWDG_MspInit() and HAL_IWDG_GetState() APIs</li>
<li>API functions are:</li>
<li>HAL_IWDG_Init(): this function insures the configuration and the start of the IWDG counter</li>
<li>HAL_IWDG_Refresh(): this function insures the reload of the IWDG counter</li>
<li>Refer to the following example to identify the changes: IWDG_Example</li>
</ul></li>
<li><strong>PWR</strong>
<ul>
<li>Add new interface HAL_FLASHEx_GetError.</li>
<li>Add constant FLASH_SIZE.</li>
<li>Use suffix U for all the defines.</li>
<li>HAL_PWREx_DisableLowPowerRunMode now returns HAL_StatusTypeDef instead of void.</li>
<li>SB and ADDR are now managed in interrupt mode, not in polling.</li>
<li>Add DMA abort treatment</li>
</ul></li>
<li><strong>RCC</strong>
<ul>
<li>Rework the correction from V1.1.3:
<ul>
<li>Backup domain are no more reseted when RTC clock source is changed from reset value.</li>
</ul></li>
</ul></li>
<li><strong>RTC</strong>
<ul>
<li>Updated HAL_RTCEx_SetWakeUpTimer_IT() function by adding clear of Wake-Up flag before enabling the interrupt.</li>
</ul></li>
<li><strong>SPI</strong>
<ul>
<li>Correct MISRA 5.2 “tmpreg” variable shall not be used inside MACRO.</li>
<li>In the SPI_HandleTypeDef structure, RxXferCount and TxXferCount are now __IO.</li>
<li>Clear the OVR flag before a new transfer.</li>
</ul></li>
<li><strong>TIMER</strong>
<ul>
<li>Correct the description of the function HAL_TIM_PWM_Start_IT.
<ul>
<li>The parameter Channel mentions the channel to be enabled and not the one to be disabled.</li>
</ul></li>
</ul></li>
<li><strong>WWDG</strong>
<ul>
<li>New simplified HAL WWDG driver: remove HAL_WWDG_Start(), HAL_WWDG_Start_IT(), HAL_WWDG_MspDeInit() and HAL_WWDG_GetState() APIs
<ul>
<li>Update HAL_WWDG_Refresh() API to remove counter parameter</li>
<li>New field EWIMode in WWDG_InitTypeDef to specify need for Early Wakeup Interrupt</li>
<li>API functions are: HAL_WWDG_Init(), HAL_WWDG_MspInit(), HAL_WWDG_Refresh(), HAL_WWDG_IRQHandler() and HAL_WWDG_EarlyWakeupCallback()</li>
</ul></li>
</ul></li>
</ul>
</div>
</div>
<div class="collapse">
<input type="checkbox" id="collapse-section6" aria-hidden="true"> <label for="collapse-section6" aria-hidden="true">V1.1.3 / 04-March-2016</label>
<div>
<h2 id="main-changes-8">Main Changes</h2>
<h3 id="maintenance-release-7">Maintenance release</h3>
<h2 id="contents-8">Contents</h2>
<ul>
<li><strong>Generic update</strong>
<ul>
<li>Update HAL weak empty callbacks to prevent unused argument compilation warnings with some compilers.</li>
<li>Improve the update of the SystemCoreClock variable within the HAL Driver.</li>
<li>Split aAPBAHBPrescTable into aAHBPrescTable and aAPBPrescTable.</li>
<li>Reduce HSE_STARTUP_TIMEOUT from 5s to 100ms.</li>
<li>Reduce MSI_TIMEOUT_VALUE from 100ms to 2ms.</li>
<li>Reduce HSI_TIMEOUT_VALUE from 100ms to 2ms.</li>
<li>Reduce LSI_TIMEOUT_VALUE from 100ms to 2ms.</li>
<li>Reduce PLL_TIMEOUT_VALUE from 100ms to 2ms.</li>
</ul></li>
<li><strong>CORTEX</strong>
<ul>
<li>__HAL_CORTEX_SYSTICKCLK_CONFIG is now deprecated. Prefer using HAL_SYSTICK_CLKSourceConfig function.</li>
</ul></li>
<li><strong>FLASH</strong>
<ul>
<li>Correct issue preventing Cat.1 devices to write data in EEPROM.</li>
</ul></li>
<li><strong>I2C</strong>
<ul>
<li>Add NACK management during wait on flag treatment.</li>
<li>Update the state machine.</li>
<li>It is now possible to use the I2C transmission with a data size of 0.</li>
</ul></li>
<li><strong>RCC</strong>
<ul>
<li>Optimize HAL_RCC_ClockConfig.</li>
<li>LSEON is reset only if required inside HAL_RCC_OscConfig.</li>
<li>RCC HSE pre-scaler reconfiguration for LCD/RTC peripherical is now possible.</li>
<li>Backup domain are no more reseted when RTC clock source is changed from reset value.</li>
</ul></li>
<li><strong>SMARTCARD</strong>
<ul>
<li>Update description of GuardTime and Prescaler fields in SMARTCARD_InitTypeDef structure.</li>
</ul></li>
<li><strong>UART</strong>
<ul>
<li>HAL_LIN_SendBreak() now use IS_UART_LIN_INSTANCE instead of IS_UART_INSTANCE.</li>
<li>Correct the UART_BRR_SAMPLING8 macro in the case of cary handling.</li>
</ul></li>
</ul>
</div>
</div>
<div class="collapse">
<input type="checkbox" id="collapse-section5" aria-hidden="true"> <label for="collapse-section5" aria-hidden="true">V1.1.2 / 09-October-2015</label>
<div>
<h2 id="main-changes-9">Main Changes</h2>
<h3 id="maintenance-release-8">Maintenance release</h3>
<h2 id="contents-9">Contents</h2>
<ul>
<li><strong>ADC</strong>
<ul>
<li>The ADC internal macro “IS_ADC_RANGE” is modified to take into account the ADC resolution.</li>
<li>The function HAL_ADC_PollForEvent, in case of timeout, returns HAL_TIMEOUT instead of HAL_ERROR.</li>
<li>HAL_ADC_Init set the ADC handle in state HAL_ADC_ERROR_INTERNAL if the user try to initialize the ADC in DiscontinuousConvMode and ContinuousConvMode simultaneously, which is not possible.</li>
<li>Enhance the check for ScanConvMode in HAL_ADC_Init.</li>
</ul></li>
<li><strong>Cortex</strong>
<ul>
<li>Corrected Misra error (MISRA C 2004 rule 10.5).</li>
</ul></li>
<li><strong>CRC</strong>
<ul>
<li>Corrected the macro __HAL_CRC_SET_IDR.</li>
</ul></li>
<li><strong>GPIO</strong>
<ul>
<li>Corrected the macro GPIO_GET_INDEX.</li>
<li>To insure the same naming accross all STM32 families (F4, F2, F0, F1, L1 etc):
<ul>
<li>Replacing GPIO_SPEED_VERY_LOW by GPIO_SPEED_FREQ_LOW.</li>
<li>Replacing GPIO_SPEED_LOW by GPIO_SPEED_FREQ_MEDIUM.</li>
<li>Replacing GPIO_SPEED_MEDIUM by GPIO_SPEED_FREQ_HIGH.</li>
<li>Replacing GPIO_SPEED_HIGH by GPIO_SPEED_FREQ_VERY_HIGH.</li>
</ul></li>
</ul></li>
<li><strong>IRDA</strong>
<ul>
<li>Corrected the HAL_IRDA_IRQHandler which was preventing to handle 2 simultaneous errors.</li>
</ul></li>
<li><strong>I2C</strong>
<ul>
<li>Corrected an issue where the STOP bit was not cleared after reading data depending on APB/I2C frequency.</li>
</ul></li>
<li><strong>I2S</strong>
<ul>
<li>HAL_I2S_Transmit() is updated to keep the check on busy flag only for the slave.</li>
</ul></li>
<li><strong>PCD</strong>
<ul>
<li>Corrected issue when using USB Device double-buffering mode for IN endpoints.</li>
<li>do{ … } while(0) is used for multi statement macros.</li>
</ul></li>
<li><strong>PWR</strong>
<ul>
<li>Corrected Misra error (MISRA C 2004 rule 14.3).</li>
</ul></li>
<li><strong>RCC</strong>
<ul>
<li>In HAL_RCCEx_PeriphCLKConfig, the reset of the backup domain occurs only if the RTC clock source has been changed.</li>
<li>__HAL_RCC_HSE_CONFIG is updated to remove the transition from RCC_HSE_ON to RCC_HSE_BYPASS.</li>
<li>Adding the macro __HAL_RCC_MCO1_CONFIG to configure the MCO clock.</li>
<li>Adding the macros and function to handle LSE CSS interrupt.</li>
<li>Corrected an error in HAL_RCC_GetSysClockFreq when the PLL is used as system clock. An incorrect sysclockfreq was returned.</li>
</ul></li>
<li><strong>RTC</strong>
<ul>
<li>RTC_TimeTypeDef.SecondFraction field is added to specifies the range or granularity of Sub Second register content.This field will be used only by HAL_RTC_GetTime function.</li>
<li>HAL_RTC_GetTime is updated to take into account the new field RTC_TimeTypeDef.SecondFraction.</li>
<li>Corrected error in __HAL_RTC_TAMPER_TIMESTAMP_EXTI_GET_FLAG macro.</li>
<li>Add additionnal checks on WUTWF flag in HAL_RTCEx_SetWakeUpTimer_IT.</li>
<li>do{ … } while(0) is used for multi statement macros.</li>
</ul></li>
<li><strong>USART</strong>
<ul>
<li>Corrected the HAL_USART_IRQHandler which was preventing to handle 2 simultaneous errors.</li>
</ul></li>
<li><strong>UART</strong>
<ul>
<li>Removed the activation of ERR IT from HAL_UART_Transmit_IT() which was leading to HAL_UART_IRQ_Handler wrong behavior.</li>
<li>Corrected the HAL_UART_IRQHandler which was preventing to handle 2 simultaneous errors.</li>
</ul></li>
<li><strong>SMARTCARD</strong>
<ul>
<li>Corrected the HAL_SMARTCARD_IRQHandler which was preventing to handle 2 simultaneous errors.</li>
</ul></li>
</ul>
</div>
</div>
<div class="collapse">
<input type="checkbox" id="collapse-section3" aria-hidden="true"> <label for="collapse-section3" aria-hidden="true">V1.1.1 / 31-March-2015</label>
<div>
<h2 id="main-changes-10">Main Changes</h2>
<h3 id="maintenance-release-9">Maintenance release</h3>
<ul>
<li>Include path changes for compilation under Unix environment</li>
<li>Update drivers to be C++ compliant</li>
</ul>
<h2 id="contents-10">Contents</h2>
<ul>
<li><strong>CORTEX</strong>
<ul>
<li>Added interface to access MPU features (refer to stm32l1xx_hal_cortex.h)</li>
</ul></li>
<li><strong>CRYP</strong>
<ul>
<li>Added Instance field in CRYP_HandleTypeDef.
<ul>
<li>HAL CRYP driver updated to support multi instance, so user must ensure that the new parameter Instance is initialized in his application (CRYPHandle.Instance = CRYP)</li>
</ul></li>
</ul></li>
<li><strong>FLASH</strong>
<ul>
<li>Changing field name of NOR_CFITypeDef (CFI1X changed to CFI1_X)</li>
</ul></li>
<li><strong>PCD</strong>
<ul>
<li>HAL_PCD_ActiveRemoteWakeup renamed HAL_PCD_ActivateRemoteWakeup</li>
<li>HAL_PCD_DeActiveRemoteWakeup renamed to HAL_PCD_DeActivateRemoteWakeup</li>
</ul></li>
<li><strong>PWR</strong>
<ul>
<li>HAL_PWR_PVDConfig renamed HAL_PWR_ConfigPVD</li>
<li>Added new interfaces:
<ul>
<li>void HAL_PWR_EnableSleepOnExit(void);</li>
<li>void HAL_PWR_DisableSleepOnExit(void);</li>
<li>void HAL_PWR_EnableSEVOnPend(void);</li>
<li>void HAL_PWR_DisableSEVOnPend(void);</li>
<li>void HAL_PWR_EnableSleepOnExit(void);</li>
<li>uint32_t HAL_PWREx_GetVoltageRange(void);</li>
</ul></li>
</ul></li>
<li><strong>RCC</strong>
<ul>
<li>HAL_RCC_CCSCallback renamed to HAL_RCC_CSSCallback</li>
<li>Adding HAL_RCCEx_GetPeriphCLKFreq interface.</li>
</ul></li>
<li><strong>SMARTCARD</strong>
<ul>
<li>Removal of HAL_SMARTCARD_ReInit interface.</li>
</ul></li>
<li><strong>SPI</strong>
<ul>
<li>HAL_SPI_GetError now returns a uint32_t instead of HAL_SPI_ErrorTypeDef.</li>
</ul></li>
<li><strong>TIMER</strong>
<ul>
<li>Adding interface HAL_TIM_SlaveConfigSynchronization_IT</li>
</ul></li>
<li><strong>UART</strong>
<ul>
<li>The field ErrorCode of UART_HandleTypeDef is changed from HAL_UART_ErrorTypeDef to uint32_t.</li>
</ul></li>
<li><strong>USART</strong>
<ul>
<li>The field ErrorCode of UART_HandleTypeDef is changed from HAL_UART_ErrorTypeDef to uint32_t.</li>
</ul></li>
</ul>
</div>
</div>
<div class="collapse">
<input type="checkbox" id="collapse-section2" aria-hidden="true"> <label for="collapse-section2" aria-hidden="true">V1.1.0 / 06-February-2015</label>
<div>
<h2 id="main-changes-11">Main Changes</h2>
<h3 id="maintenance-release-10">Maintenance release</h3>
<ul>
<li>Add support of new <strong>STM32L1 eXtended devices</strong> - <strong>STM32l151xDX, STM32l152xDX &amp; STM32l62xDX</strong></li>
</ul>
<h2 id="contents-11">Contents</h2>
<ul>
<li><strong>HAL</strong> generic
<ul>
<li>Add eXtended Devices switchs when needed
<ul>
<li>STM32L151xDX has same features than STM32L151xE</li>
<li>STM32L152xDX has same features than STM32L152xE</li>
<li>STM32L162xDX has same features than STM32L162xE</li>
</ul></li>
</ul></li>
<li><strong>HAL FLASH</strong>
<ul>
<li>Add support of new STM32L1 Devices (same as other HAL)</li>
<li>stm32l1xx_hal_flash_ex.c : Specific treatment done in HAL_FLASHEx_Erase and HAL_FLASHEx_Erase_IT as memory is not continuous between 2 banks, user should perform pages erase by bank only</li>
</ul></li>
</ul>
</div>
</div>
<div class="collapse">
<input type="checkbox" id="collapse-section1" aria-hidden="true"> <label for="collapse-section1" aria-hidden="true">V1.0.0 / 05-September-2014</label>
<h2 id="main-changes-12">Main Changes</h2>
<h3 id="first-official-release">First official release</h3>
</div>
</section>
</div>
<footer class="sticky">
For complete documentation on <mark>STM32 Microcontrollers</mark> , visit: <a href="http://www.st.com/STM32">http://www.st.com/STM32</a>
</footer>
</body>
</html>
